package main;

import beans.Forum;
import beans.Mitglied;
import java.util.ArrayList;
import java.util.List;

public class Steuerung {

    private List<Forum> foren = new ArrayList<>();
    private List<Mitglied> mitglieder = new ArrayList<>(); //Für Tests
    private EinUndAusgabe io;
    private boolean autoEingabe = true;
    
    public Steuerung(EinUndAusgabe io) {
        this.io = io;
    }
    
    public Steuerung() {
        this.io = new EinUndAusgabe();
    }

    private String textEingeben(String aufforderung) {
        System.out.print(aufforderung);
        String output = io.leseString();
        if(autoEingabe)
            System.out.println("[" + output + "]");
        return output;
    }
    
    private int intEingeben() {
        int output = io.leseInteger();
        if(autoEingabe)
            System.out.println("[" + output + "]");
        return output;
    }

    public void forenAnlegen() {
        int eingabe = -1;
        while (eingabe != 0) {
            System.out.print("Beenden (0) oder Forum anlegen (1): ");
            eingabe = intEingeben();
            if (eingabe == 1) {
                Forum f = new Forum();
                f.setTitel(textEingeben("Titel: "));
                getForen().add(f);
            }
        }
    }

    public void mitgliederAnlegen() {
        int eingabe = -1;
        while (eingabe != 0) {
            System.out.print("Beenden (0) oder Mitglied anlegen (1): ");
            eingabe = intEingeben();
            if (eingabe == 1) {
                Mitglied m = new Mitglied(io);
                m.setName(textEingeben("Name: "));
                for (Forum f : getForen()) {
                    System.out.println("Forum: " + f.getTitel() + "\n"
                            + " (0) Passiv bleiben\n"
                            + " (1) nur Zuhören\n"
                            + " (2) Aussagen mitentscheiden");
                    // TODO 
                    eingabe = intEingeben();
                    if(eingabe == 1) { //als Zuhörer hinzufügen
                        f.addPropertyChangeListener(m);
                    } else if(eingabe == 2) { //als Mitentscheider + Zuhörer hinzufügen
                        f.addPropertyChangeListener(m);
                        f.addVetoableChangeListener(m);
                    }
                    eingabe = -1;
                    // TODO ENDE
                }
                mitglieder.add(m); //Zum Prüfen
            }
        }
    }

    public void diskutieren() {
        // TODO
        int i=0;
        int eingabe;
        
        for(Forum f : getForen()) {
            System.out.println("[" + i + "] " + f.getTitel());
            i++;
        }
        System.out.print("Welches Forum: ");
        eingabe = intEingeben();
        
        if(eingabe < 0 || eingabe >= getForen().size()) {
            System.out.println("Keine gültige Eingabe");
        } else {
            Forum f = getForen().get(eingabe);
            f.addThema(textEingeben("Thema: "));
        }
        // TODO ENDE
    }

    public void dialog() {
        int eingabe = -1;
        System.out.println("Foren einrichten.");
        forenAnlegen();
        System.out.println("Mitglieder einrichten.");
        mitgliederAnlegen();
        while (eingabe != 0) {
            System.out.println("Was wollen Sie machen?\n"
                    + " (0) Programm beenden\n"
                    + " (1) Forum zur Diskussion wählen\n"
                    + " (2) Foren mit verabschiedeten Aussagen ausgeben");
            eingabe = io.leseInteger();
            if (eingabe == 1) {
                diskutieren();
            }
            if (eingabe == 2) {
                for (Forum f : getForen()) {
                    System.out.print(f);
                }
            }
        }
    }

    /**
     * @return the foren
     */
    public List<Forum> getForen() {
        return foren;
    }

    /**
     * @param io the io to set
     */
    public void setIo(EinUndAusgabe io) {
        this.io = io;
    }

    /**
     * @return the mitglieder
     */
    public List<Mitglied> getMitglieder() {
        return mitglieder;
    }
    
}
